package core;

import fileoperation.FileStatus;
import repository.Repository;
import stage.Index;

import java.io.File;

public class JitAdd {
    /**
     * Add a directory (files inside)
     * @param file
     * @throws Exception
     */
    public static void addDir(File file) throws Exception {
        // 如果是文件夹，递归遍历其子文件
        File[] fs = file.listFiles();

        for (File f : fs) {
//            System.out.println(f.getName());
            if (f.isFile()) addFile(f);
            else addDir(f);
        }
        return;
    }

    /**
     * Add a file record
     * @param file
     * @throws Exception
     */
    public static void addFile(File file) throws Exception {
        Index index = new Index();
        int fileStatus = index.inIndex(file); // 暂存区有无重名文件
        if (fileStatus == -1) { // 无同名文件（包含文件重命名）
            index.addItem(file);// file加入indexList中
            index.writeIndex();// file写入index文件中
        }
        else { // 有同名文件
            String workDir = Repository.getWorkTree();
            String fileName = file.getPath().substring(workDir.length() + 1);
            boolean changed = FileStatus.fileChanged(Repository.getWorkTree(), fileName, index.getIndexList());
            if (changed) { // 文件内容被修改，替换indexList中的记录
                index.deleteItem(file); // 删除旧记录
                index.addItem(file);// file加入indexList中
                index.writeIndex();// file写入index文件中
            }
            else {
                System.out.println("file with same path already exists!");
            }
        }
    }

    /**
     * Add a file record to stage & append record to ./index
     * @param path
     * @throws Exception
     */
    public static void add(String path) throws Exception {
        File file = new File(path);
        if (file.isDirectory()) {
            // 如果是文件夹，递归遍历其子文件
            addDir(file);
        }
        if (file.isFile()) {
            addFile(file);
        }
    }
}
